home *** CD-ROM | disk | FTP | other *** search
/ Aminet 44 / Aminet 44 (2001)(GTI - Schatztruhe)[!][Aug 2001].iso / Aminet / dev / src / Rkm_asm.lha / Assembly_Codes / OS_Sources / Devices / Audio.s next >
Text File  |  1992-09-02  |  3KB  |  167 lines

  1.  
  2.     INCDIR    WORK:Include/
  3.  
  4.     INCLUDE    exec/exec_lib.i
  5.     INCLUDE    exec/memory.i
  6.     INCLUDE    intuition/intuition_lib.i
  7.     INCLUDE    intuition/intuition.i
  8.     INCLUDE    graphics/graphics_lib.i
  9.     INCLUDE dos/dos_lib.i
  10.     INCLUDE dos/dos.i
  11.     INCLUDE devices/audio.i
  12.  
  13.     INCLUDE    misc/easystart.i
  14.  
  15. LIB_VER        EQU    39
  16.  
  17.     moveq    #LIB_VER,d0
  18.     lea    int_name(pc),a1
  19.     move.l    4.w,a6
  20.     jsr    _LVOOpenLibrary(a6)
  21.     move.l    d0,_IntuitionBase
  22.     beq    exit_quit
  23.  
  24.     moveq    #LIB_VER,d0
  25.     lea    graf_name(pc),a1
  26.     jsr    _LVOOpenLibrary(a6)
  27.     move.l    d0,_GfxBase
  28.     beq    exit_closeint
  29.  
  30.     moveq    #LIB_VER,d0
  31.     lea    dos_name(pc),a1
  32.     jsr    _LVOOpenLibrary(a6)
  33.     move.l    d0,_DOSBase
  34.     beq    exit_closegfx
  35.  
  36.     jsr    _LVOCreateMsgPort(a6)
  37.     move.l    d0,audport
  38.     beq    exit_closedos
  39.     move.l    d0,a0
  40.     moveq    #ioa_SIZEOF,d0
  41.     jsr    _LVOCreateIORequest(a6)
  42.     move.l    d0,audreq
  43.     beq    exit_audport
  44.     move.l    d0,a1
  45.     move.l    #masks,ioa_Data(a1)
  46.     move.l    #4,ioa_Length(a1)
  47.     move.w    #ADCMD_ALLOCATE,IO_COMMAND(a1)
  48.     lea    aud_name(pc),a0
  49.     moveq    #0,d0
  50.     moveq    #0,d1
  51.     jsr    _LVOOpenDevice(a6)
  52.     tst.l    d0
  53.     bne    exit_audreq
  54.  
  55.     moveq    #0,d0
  56.     lea    notes(pc),a0
  57.     move.l    #254,d1
  58.  
  59. notes_l    move.w    d0,(a0)+
  60.     addq.w    #1,d0
  61.     dbra    d1,notes_l
  62.  
  63.     clr.w    510(a0)
  64.  
  65.     move.l    audreq(pc),a1
  66.     move.b    #ADIOF_PERVOL,IO_FLAGS(a1)
  67.     move.w    #64,ioa_Volume(a1)
  68.     move.w    #7000,ioa_Period(a1)
  69.     move.w    #1,ioa_Cycles(a1)
  70.     lea    notes(pc),a0
  71.     move.l    a0,ioa_Data(a1)
  72.     move.l    #256,ioa_Length(a1)
  73.     move.w    #CMD_WRITE,IO_COMMAND(a1)
  74.     bsr    beginio
  75.  
  76.     move.l    audreq(pc),a1
  77.     move.b    #ADIOF_PERVOL,IO_FLAGS(a1)
  78.     move.w    #7500,ioa_Period(a1)
  79.     move.w    #2,ioa_Cycles(a1)
  80.     bsr.s    beginio
  81.  
  82.     move.l    audreq(pc),a1
  83.     move.b    #ADIOF_PERVOL,IO_FLAGS(a1)
  84.     move.w    #9999,ioa_Period(a1)
  85.     move.w    #1,ioa_Cycles(a1)
  86.     bsr.s    beginio
  87.  
  88.     move.l    audreq(pc),a1
  89.     move.b    #ADIOF_PERVOL,IO_FLAGS(a1)
  90.     move.w    #3671,ioa_Period(a1)
  91.     move.w    #2,ioa_Cycles(a1)
  92.     bsr.s    beginio
  93.  
  94.  
  95. close_audio
  96.     move.l    audreq(pc),a1
  97.     CALLEXEC    CloseDevice
  98.  
  99. exit_audreq
  100.     move.l    audreq(pc),a0
  101.     CALLEXEC    DeleteIORequest
  102.  
  103. exit_audport
  104.     move.l    audport(pc),a0
  105.     CALLEXEC    DeleteMsgPort
  106.  
  107. exit_closedos
  108.     move.l    _DOSBase(pc),a1
  109.     CALLEXEC    CloseLibrary
  110.  
  111. exit_closegfx
  112.     move.l    _GfxBase(pc),a1
  113.     CALLEXEC    CloseLibrary
  114.  
  115. exit_closeint
  116.     move.l    _IntuitionBase(pc),a1
  117.     CALLEXEC    CloseLibrary
  118.  
  119. exit_quit
  120.     moveq    #0,d0
  121.     rts
  122.  
  123.  
  124. beginio
  125.  
  126. * Below is the BeginIO code. But here I will use execute's BEGINIO Macro,
  127. * for non-assembly programmers, which is the same code as below.
  128. *
  129. *    move.l    a6,-(a7)
  130. *    move.l    $14(a1),a6
  131. *    jsr    -$1E(a6)
  132. *    move.l    (a7)+,a6
  133.  
  134.     move.l    audreq(pc),a1
  135.     BEGINIO
  136.     move.l    audreq(pc),a1
  137.     CALLEXEC    WaitIO
  138.     tst.l    d0
  139.     bne.s    error
  140.     bra.s    bi_end
  141. error    suba.l    a0,a0
  142.     CALLINT    DisplayBeep
  143. bi_end    rts
  144.  
  145.  
  146.  * Long Variables.
  147.  
  148. _IntuitionBase    dc.l    0
  149. _GfxBase    dc.l    0
  150. _DOSBase    dc.l    0
  151. audport        dc.l    0
  152. audreq        dc.l    0
  153.  
  154.  * Byte Variables.
  155.  
  156. audioerr    dc.b    0
  157. masks        dc.b    1,2,4,8
  158. notes        dcb.b    512,0
  159.  
  160.  
  161.  * String Variables.
  162.  
  163. int_name    dc.b    'intuition.library',0
  164. graf_name    dc.b    'graphics.library',0,0
  165. dos_name    dc.b    'dos.library',0
  166. aud_name    dc.b    'audio.device',0,0
  167.